// 路由配置：定义应用的页面路径与组件映射，使用浏览器历史模式
import { createRouter, createWebHistory } from 'vue-router'
import LoginView from '../views/LoginView.vue'
import RegisterView from '../views/RegisterView.vue'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    // 登录页
    {
      path: '/login',
      name: 'login',
      component: LoginView,
      meta: { requiresAuth: false } // 登录页不需要认证
    },
    // 注册页
    {
      path: '/register',
      name: 'register',
      component: RegisterView,
      meta: { requiresAuth: false } // 注册页不需要认证
    },
    // 首页（懒加载）
    {
      path: '/',
      name: 'home',
      component: () => import('../views/HomeView.vue'),
      meta: { requiresAuth: true } // 首页需要认证
    },
    // 游戏页（懒加载）
    {
      path: '/game',
      name: 'game',
      component: () => import('../views/GameView.vue'),
      meta: { requiresAuth: true } // 游戏页需要认证
    },
    // 游戏页（带房间ID）
    {
      path: '/game/:roomId',
      name: 'game-with-room',
      component: () => import('../views/GameView.vue'),
      meta: { requiresAuth: true } // 游戏页需要认证
    },
    // 个人资料页
    {
      path: '/profile',
      name: 'profile',
      component: () => import('../views/ProfileView.vue'),
      meta: { requiresAuth: true } // 个人资料页需要认证
    },
    // 加入房间页（可带参数）
    {
      path: '/join/:roomId?',
      name: 'join-room',
      component: () => import('../views/JoinRoomView.vue'),
      meta: { requiresAuth: true }
    },
    // 称号管理页
    {
      path: '/titles',
      name: 'titles',
      component: () => import('../views/TitlesView.vue'),
    },
    // 游戏详情页
    {
      path: '/game-detail',
      name: 'game-detail',
      component: () => import('../views/GameDetailView.vue'),
      meta: { requiresAuth: true } // 游戏详情页需要认证
    },
  ]
})

// 全局前置守卫
router.beforeEach(async (to, from, next) => {
  // 检查路由是否需要认证
  if (to.meta.requiresAuth) {
    try {
      // 从localStorage获取token信息
      const tokenStr = localStorage.getItem('token')
      let token = null
      
      try {
        token = tokenStr ? JSON.parse(tokenStr) : null
      } catch {
        token = null
      }
      
      // 检查是否有有效的accessToken
      if (token && token.accessToken) {
        // 有token，允许访问
        next()
      } else {
        // 没有token，重定向到登录页
        console.log('🔒 需要登录，重定向到登录页')
        next({ name: 'login' })
      }
    } catch (error) {
      console.error('路由守卫检查失败:', error)
      // 出错时重定向到登录页
      next({ name: 'login' })
    }
  } else {
    // 不需要认证的页面，直接放行
    next()
  }
})

export default router
